#if _MSC_VER
 #pragma once
#endif // _MSC_VER

#ifndef __HERZELEID_STATECORE_INCLUDED__
 #define __HERZELEID_STATECORE_INCLUDED__
 #include "HerzeleidStateSwapSet.hxx"
 #include "HerzeleidSwapSetArray.hxx"

//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererStatesNamespaceBegin struct CoreInputAssembler
{
	typedef HerzeleidRendererShadingNamespaceImpl::SwapSetArray<InputAssemblerSwapSet> InputAssemblerSwapSetArray;
	InputAssemblerSwapSetArray SetArray;
	CoreInputAssembler();

} HerzeleidRendererStatesNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererStatesNamespaceBegin struct CoreOutputMerger
{
	typedef HerzeleidRendererShadingNamespaceImpl::SwapSetArray<OutputMergerSwapSet> OutputMergerSwapSetArray;
	OutputMergerSwapSetArray SetArray;
	CoreOutputMerger();

} HerzeleidRendererStatesNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererStatesNamespaceBegin struct CoreRasterizer
{
	typedef HerzeleidRendererShadingNamespaceImpl::SwapSetArray<RasterizerSwapSet> RasterizerSwapSetArray;
	RasterizerSwapSetArray SetArray;
	CoreRasterizer();

} HerzeleidRendererStatesNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererStatesNamespaceBegin
	typedef HerzeleidRendererCoreNamespaceImpl::Context3 NativeImmediateContext3; TinyTypeDecl(NativeImmediateContext3);
	typedef HerzeleidRendererCoreNamespaceImpl::Context3 NativeDeferredContext3; TinyTypeDecl(NativeDeferredContext3);
	TinyTypeDecl( InputAssemblerSwapSet );
	TinyTypeDecl( OutputMergerSwapSet );
	TinyTypeDecl( RasterizerSwapSet );
HerzeleidRendererStatesNamespaceEnd
//////////////////////////////////////////////////////////////////////////////////////////////
HerzeleidRendererStatesNamespaceBegin
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void BindStageIADeferred( // Binds the input assembler set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext3,   // Context to bind input assembler set to
	_In_ InputAssemblerSwapSetConstPtrConst pContext,// Input assembler set to bind
	_In_opt_ UInt32 uiVertexBufferStartSlot = 0ui32, // Vertex buffer index to start binding from 
	_In_opt_ UInt32 uiVertexBufferNumSlots = HERZELEID_VERTEX_BUFFER_NUM_SLOTS // Num vertex buffers to bind 
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void BindStageOMWithUAVsDeferred( // Binds the output merger set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext,	// Context to bind output merger set to
	_In_ OutputMergerSwapSetConstPtrConst pContent	// Output merger set to bind
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void BindStageOMDeferred( // Binds the output merger set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext,	// Context to bind output merger set to
	_In_ OutputMergerSwapSetConstPtrConst pContent	// Output merger set to bind
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void BindStageRSDeferred( // Binds the rasterizer set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext,	// Context to bind rasterizer set to
	_In_ RasterizerSwapSetConstPtrConst pContent	// Rasterizer set to bind
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void UnbindStageIADeferred( // Binds the input assembler set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext   // Context to bind input assembler set to
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void UnbindStageOMWithUAVsDeferred( // Binds the output merger set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext	// Context to bind output merger set to
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void UnbindStageOMDeferred( // Binds the output merger set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext	// Context to bind output merger set to
	);
HERZELEID_FORCEINLINING HERZELEID_NOALIAS Void UnbindStageRSDeferred( // Binds the rasterizer set to the rendering pipeline 
	_In_ NativeDeferredContext3PtrConst pContext	// Context to bind rasterizer set to
	);
HerzeleidRendererStatesNamespaceEnd;
//////////////////////////////////////////////////////////////////////////////////////////////

#endif